package com.freemalll.system.domain;

import java.util.List;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.freemalll.common.core.annotation.Excel;
import com.freemalll.common.core.annotation.Excel.ColumnType;
import com.freemalll.common.core.web.domain.AuditEntity;

/**
 * 系统资源表 sys_resources
 * 
 * @author freemalll
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_resources")
public class SysResources extends AuditEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键ID */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    @Excel(name = "主键ID", cellType = ColumnType.STRING)
    private String id;

    /** 应用编码 登录可带应用code 返回相关应用资源 */
    @TableField("app_code")
    @Excel(name = "应用编码")
    @Size(min = 0, max = 50, message = "应用编码不能超过50个字符")
    private String appCode;

    /** 系统id */
    @TableField("app_id")
    @Excel(name = "系统id")
    @Size(min = 0, max = 32, message = "系统id不能超过32个字符")
    private String appId;

    /** 应用名称 */
    @TableField("app_name")
    @Excel(name = "应用名称")
    @Size(min = 0, max = 50, message = "应用名称不能超过50个字符")
    private String appName;

    /** 父级应用id */
    @TableField("parent_id")
    @Excel(name = "父级应用id")
    private String parentId;

    /** 资源编码 权限判断使用 */
    @TableField("resource_code")
    @Excel(name = "资源编码")
    @NotBlank(message = "资源编码不能为空")
    @Size(min = 0, max = 100, message = "资源编码不能超过100个字符")
    private String resourceCode;

    /** 资源名称 */
    @TableField("resource_name")
    @Excel(name = "资源名称")
    @NotBlank(message = "资源名称不能为空")
    @Size(min = 0, max = 200, message = "资源名称不能超过200个字符")
    private String resourceName;

    /** 资源状态 */
    @TableField("resource_status")
    @Excel(name = "资源状态", readConverterExp = "true=启用,false=停用")
    private Boolean resourceStatus;

    /** 资源类型 menu菜单 page页面 button按钮 */
    @TableField("resource_type")
    @Excel(name = "资源类型", readConverterExp = "menu=菜单,page=页面,button=按钮")
    @Size(min = 0, max = 10, message = "资源类型不能超过10个字符")
    private String resourceType;

    /** 资源排序 */
    @TableField("sort")
    @Excel(name = "资源排序", cellType = ColumnType.NUMERIC)
    private Integer sort;

    /** 子资源列表（用于树形结构） */
    @TableField(exist = false)
    private List<SysResources> children;
}